package com.train.mgr.modules.biz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.train.common.model.PageResult;
import com.train.mgr.modules.biz.dto.TraineeCourseDetailVo;
import com.train.mgr.modules.biz.dto.TraineeCourseHomeVo;
import com.train.mgr.modules.biz.dto.TraineeCourseUserGroupVo;
import com.train.mgr.modules.biz.dto.TraineeLessonFinishSituationVo;
import com.train.mgr.modules.biz.dto.request.*;
import com.train.mgr.modules.biz.dto.response.CourseCheckUserRespListDTO;
import com.train.mgr.modules.biz.dto.response.CourseUserRespListDTO;
import com.train.mgr.modules.biz.dto.response.NotJoinGroupUserRespListDTO;
import com.train.mgr.modules.biz.entity.CourseUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * <p>
 * 课程学员表 服务类
 * </p>
 *
 * @author cxg
 * @date 2025-09-30
 */
public interface ICourseUserService extends IService<CourseUser> {

    PageResult<TraineeCourseDetailVo> getMyCourse(TraineeCoursePageDTO dto);

    Integer checkJoinCourseState(Long courseId);

    List<TraineeCourseHomeVo> getUserCourse(Long courseId);

    int delByCoursId(Long coursId);

    List<TraineeCourseHomeVo> getUserJoinCourse(Long courseId);

    List<TraineeCourseHomeVo> getTraineeCourseUser(Long courseId);

    List<TraineeLessonFinishSituationVo> getLessonFinishSituation(Long courseId);

    PageResult<CourseUserRespListDTO> findCourseUserList(CourseUserQueryDTO params);

    PageResult<CourseCheckUserRespListDTO> findCheckCourseUserList(CourseCheckUserQueryDTO params);

    PageResult<NotJoinGroupUserRespListDTO> findNoGroupUserList(NoGroupQueryReqDTO params);

    boolean setUsersGroup(SetUserGroupReqDTO params);

    int deleteById(Long id);

    boolean add(CourseUserAddDTO dto);

    boolean batchReview(BatchIdsDTO dto);

    List<StudentImportDTO> checkExcelData(Long courseId,List<StudentImportDTO> importList);

    boolean saveExcelData(Long courseId,List<StudentImportDTO> importList);

    List<String> getUserLabelList();

    List<TraineeCourseUserGroupVo> getUserGroupList(Long courseId);
}
